package com.cskaoyan.javase.object.introduction1;

/**
 * @description: 介绍Object类
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * Application Programming Interface(API)：应用程序编程接口，在Java当中指的是一些预先定义好的类和方法
 * 接口: 表示的是一种规范 标准
 * ​	作用：开发者可以在不关注具体实现细节的前提下，使用这些已经预先定义好的类和方法实现自己的需求 白嫖别人写好的代码
 * ​	分类：
 * ​	    1，JDK中自带的，可以通过官方API文档去学习
 * ​		2，开发者编写的，依赖于开发者之间去沟通 包括后面的框架 API合集
 * 我做了一个爬虫,专门去b站上收集舞蹈资源,然后班上同学看到了 我也要学习舞蹈
 * 于是我直接把这个爬虫打包起来,变成可执行的
 * 这个东西 对于你来说 就是相当于API
 *
 *
 *
 * Object类概述：
 * ​	1，Object类是所有类继承层次的祖先类，所有类（包括数组）都直接或者间接的继承自该类，都实现了该类的方法
 * ​	2，但是我们在自定义类时，并不需要特别标注extends Object
 * ​	3，如果一个类没有明确的指出它的父类，Object类就默认被认为是这个类的父类，extends Object则被省略了
 *
 * Object类中的无参构造:这个是给子类对象初始化用的 super()
 * Object
 * public Object()
 *
 * API文档怎么用?
 * 1,先看文档上面类的说明,一般来说类的上面的第一句话都是简单直接的介绍这个类
 * 2,我们看这个类文档,主要还是要使用对象调用方法 属性
 * 3,关注这个类的构造方法(工具类除外 Math Arrays)
 * 4,稍微的看一看成员变量,因为Java的封装机制 绝大多数成员变量都是私有的 jdk文档也不会列举出私有的成员
 * 5,看jdk文档,重点肯定看类的方法,同样的私有方法jdk文档中没有
 * 方法代表这个类/类对象能做什么 所以这是我们重点关注的
 *
 *
 */
// Class 'Demo' explicitly extends 'java.lang.Object'.
public class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        //创建Object类对象
        Object o = new Object();
        //o.

        //创建Student对象
        Student s = new Student();
        //思考:能不能调用clone()方法 是Object类当中protected方法
        //'clone()' has protected access in 'java.lang.Object'
        //受保护成员 如果不同包 只有一种情况能访问:就是在子类中创建子类自身的对象
        //s.clone();
        Demo demo = new Demo();
        demo.clone();
    }
}
class Student{
    public static void main(String[] args) throws CloneNotSupportedException {
        Student s = new Student();
        s.clone();
    }
}
